home *** CD-ROM | disk | FTP | other *** search
/ The Business Master (3rd Edition) / The Business Master (3rd Edition).iso / files / spreotus / 123fin / finpgm.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  11.3 KB  |  390 lines

  1. 1  KEY(10) ON:ON KEY(10) GOSUB 3
  2. 2   GOTO 5
  3. 3  RUN"MENU.BAT"+CHR$(13)
  4. 5  CLS
  5. 6  LOCATE 23,24:PRINT "Press F10 to EXIT program.
  6. 100  REM ------------------------------
  7. 110  N$=      "FINANCIAL PROGRAMS"
  8. 120  REM ------------------------------
  9. 130  GOSUB 6200                        'INITIALIZE
  10. 140  REM SET UP MENU ARRAY
  11. 150  X$(1)="FUTURE VALUE OF DEPOSIT"
  12. 160  X$(2)="FUTURE VALUE OF SERIES"
  13. 170  X$(3)="PRESENT VALUE OF AMOUNT"
  14. 180  X$(4)="PRESENT VALUE OF SERIES"
  15. 190  X$(5)="PAYMENT REQD FOR FUTURE SUM"
  16. 200  X$(6)="WITHDRAWL OF FUNDS"
  17. 210  X$(7)="INTEREST RATE EARNED"
  18. 220  X$(8)="NET PRESENT VALUE, UNEVEN CASH FLOWS"
  19. 230  X$(9)="TIME TO DOUBLE"
  20. 240  X$(10)="EQUIVALENT INTEREST RATE"
  21. 250  N=10:  GOSUB 7000
  22. 260  ON X GOSUB 280,490,690,860,1050,1240,1480,1660,2020,2180
  23. 270  GOTO 100
  24. 280  REM -------------------------------
  25. 290  N$=   "FUTURE VALUE OF DEPOSIT"
  26. 300  REM -------------------------------
  27. 310  GOSUB 6200 : K=1                   'INITIALIZE
  28. 320  REM ASK FOR PARAMETERS
  29. 330  Q1$="ENTER DATA" : Q2$=""
  30. 340  Q3$="INITIAL DEPOSIT ($)"       :GOSUB 6600
  31. 350  Q3$="PERIODS PER YEAR"          :GOSUB 6600
  32. 360  Q3$="ANNUAL INT RATE (%)"       :GOSUB 6600
  33. 370  Q3$="NUMBER OF YEARS"           :GOSUB 6600
  34. 380  REM DO THE COMPUTATION
  35. 390  PRINT
  36. 400  PRINT "FUTURE VALUE"; TAB(22)
  37. 410  A=PAR(1)
  38. 420  FOR I=1 TO PAR(2)*PAR(4)
  39. 430    A=A+A*PAR(3)/100/PAR(2)
  40. 440  NEXT I
  41. 450  A=INT(A*100+0.5)/100
  42. 460  PRINT USING "$$######,.##" ; A
  43. 470  Q2$="COMPUTE" : GOSUB 3400         'ASK FOR ANOTHER
  44. 480  IF YN$="N" THEN RETURN ELSE GOTO 280
  45. 490  REM ------------------------------
  46. 500  N$=    "FUTURE VALUE OF SERIES"
  47. 510  REM ------------------------------
  48. 520  GOSUB 6200 : K=1                  'INITIALIZE
  49. 530  REM ASK FOR PARAMETERS
  50. 540  Q1$="ENTER DATA" : Q2$=""
  51. 550  Q3$="PAYMENT ($)"            :GOSUB 6600
  52. 560  Q3$="PAYMENTS PER YEAR"      :GOSUB 6600
  53. 570  Q3$="ANNUAL INT RATE (%)"    :GOSUB 6600
  54. 580  Q3$="NUMBER OF YEARS"        :GOSUB 6600
  55. 590  REM COMPUTE RESULT
  56. 600  PRINT : PRINT "FUTURE VALUE"; TAB(22)
  57. 610  A=0
  58. 620  FOR I = 1 TO PAR(2)*PAR(4)
  59. 630     A=PAR(1)+A +A*PAR(3)/100/PAR(2)
  60. 640  NEXT I
  61. 650  A= INT(A*100+0.5)/100
  62. 660  PRINT USING "$$######,.##"; A
  63. 670  Q2$="COMPUTE" : GOSUB 3400        'ASK FOR ANOTHER
  64. 680  IF YN$="N" THEN RETURN ELSE 520
  65. 690  REM ------------------------------
  66. 700  N$=   "PRESENT VALUE OF AMOUNT"
  67. 710  REM ------------------------------
  68. 720  GOSUB 6200 : K=1                  'INITIALIZE
  69. 730  REM  ASK FOR PARAMETERS
  70. 740  Q1$="ENTER DATA" : Q2$=""
  71. 750  Q3$="FUTURE VALUE ($)"       :GOSUB 6600
  72. 760  Q3$="PERIODS PER YEAR"       :GOSUB 6600
  73. 770  Q3$="ANNUAL INT RATE (%)"    :GOSUB 6600
  74. 780  Q3$="NUMBER OF YEARS"        :GOSUB 6600
  75. 790  REM DO THE COMPUTATION
  76. 800  PRINT : PRINT "PRESENT VALUE";TAB(22)
  77. 810  A=PAR(1)/(1+PAR(3)/100/PAR(2))^(PAR(2)*PAR(4))
  78. 820  A=INT(A*100+0.5)/100
  79. 830  PRINT USING "$$######,.##"; A
  80. 840  Q2$="COMPUTE" : GOSUB 3400
  81. 850  IF YN$="N" THEN RETURN ELSE GOTO 690
  82. 860  REM ------------------------------
  83. 870  N$=   "PRESENT VALUE OF SERIES"
  84. 880  REM ------------------------------
  85. 890  GOSUB 6200 : K=1                  'INITIALIZE
  86. 900  REM  ASK FOR PARAMETERS
  87. 910  Q3$="PAYMENT ($)"            :GOSUB 6600
  88. 920  Q3$="PAYMENTS PER YEAR"      :GOSUB 6600
  89. 930  Q3$="ANNUAL INT RATE (%)"    :GOSUB 6600
  90. 940  Q3$="NUMBER OF YEARS"        :GOSUB 6600
  91. 950  REM DO THE COMPUTATION
  92. 960  PRINT : PRINT "PRESENT VALUE";TAB(22)
  93. 970  A=0
  94. 980  FOR I = 1 TO PAR(2)*PAR(4)
  95. 990    A=A+PAR(1)/((1+PAR(3)/100/PAR(2))^I)
  96. 1000  NEXT I
  97. 1010  A=INT(A*100+0.5)/100
  98. 1020  PRINT USING "$$######,.##"; A
  99. 1030  Q2$="COMPUTE" : GOSUB 3400       'ASK FOR ANOTHER
  100. 1040  IF YN$="N" THEN RETURN ELSE GOTO 860
  101. 1050  REM ------------------------------
  102. 1060  N$= "PAYMENT REQD FOR FUTURE SUM"
  103. 1070  REM ------------------------------
  104. 1080  GOSUB 6200 : K=1                  'INITIALIZE
  105. 1090  REM  ASK FOR PARAMETERS
  106. 1100  Q1$="ENTER DATA"   :Q2$=""
  107. 1110  Q3$="FUTURE VALUE ($)"         :GOSUB 6600
  108. 1120  Q3$="PAYMENTS PER YEAR"        :GOSUB 6600
  109. 1130  Q3$="ANNUAL INT RATE (%)"      :GOSUB 6600
  110. 1140  Q3$="NUMBER OF YEARS"          :GOSUB 6600
  111. 1150  REM DO THE COMPUTATION
  112. 1160  PRINT : PRINT "PAYMENT";TAB(22)
  113. 1170  I=PAR(3)/100/PAR(2)
  114. 1180  Q=PAR(2)*PAR(4)
  115. 1190  A=PAR(1)*I/((1+I)^Q-1)
  116. 1200  A=INT(A*100+0.5)/100
  117. 1210  PRINT USING "$$######,.##"; A
  118. 1220  Q2$="COMPUTE" : GOSUB 3400      'ASK FOR ANOTHER
  119. 1230  IF YN$="N" THEN RETURN ELSE GOTO 1050
  120. 1240  REM ------------------------------
  121. 1250  N$=     "WITHDRAWAL OF FUNDS"
  122. 1260  REM ------------------------------
  123. 1270  GOSUB 6200 : K=1                 'INITIALIZE
  124. 1280  REM  ASK FOR PARAMETERS
  125. 1290  Q1$="ENTER DATA"  :Q2$=""
  126. 1300  Q3$="INITIAL DEPOSIT ($)"     :GOSUB 6600
  127. 1310  Q3$="WITHDWLS PER YEAR"       :GOSUB 6600
  128. 1320  Q3$="ANNUAL INT RATE (%)"     :GOSUB 6600
  129. 1330  Q3$="PAYMENT ($)"             :GOSUB 6600
  130. 1340  REM DO THE COMPUTATION
  131. 1350  PRINT : PRINT "PAYMENTS";TAB(25)
  132. 1360  A=PAR(1)  : N=1
  133. 1370  A=A+A*PAR(3)/100/PAR(2)-PAR(4)
  134. 1380  IF A < PAR(1) THEN 1400
  135. 1390  PRINT: PRINT "BANK BALANCE IS GROWING"
  136. 1395  SOUND 500,9 :GOTO 1460
  137. 1400  IF A < PAR(4) THEN 1430
  138. 1410  N=N+1
  139. 1420  GOTO 1370
  140. 1430  PRINT USING "######.##"; N
  141. 1440  PRINT "YEARS OF PAYMENTS";TAB(25)
  142. 1450  PRINT USING "######.##"; N/12
  143. 1460  Q2$="COMPUTE" : GOSUB 3400       'ASK FOR ANOTHER
  144. 1470  IF YN$="N" THEN RETURN ELSE GOTO 1240
  145. 1480  REM ------------------------------
  146. 1490  N$=     "INTEREST RATE EARNED"
  147. 1500  REM ------------------------------
  148. 1510  GOSUB 6200 : K=1                  'INITIALIZE
  149. 1520  REM  ASK FOR PARAMETERS
  150. 1530  Q1$="ENTER DATA"  :Q2$=""
  151. 1540  Q3$="AMOUNT INVESTED ($)"    :GOSUB 6600
  152. 1550  Q3$="AMOUNT RETURNED ($)"    :GOSUB 6600
  153. 1560  Q3$="PERIODS PER YEAR"       :GOSUB 6600
  154. 1570  Q3$="NUMBER OR YEARS"        :GOSUB 6600
  155. 1580  REM DO THE COMPUTATION
  156. 1590  PRINT : PRINT "ANNUAL INT RATE (%)";TAB(24)
  157. 1600  Q=PAR(3)*PAR(4)
  158. 1610  I=((PAR(2)/PAR(1))^(1/Q)-1)*100*PAR(3)
  159. 1620  I=INT(I*100+0.5)/100
  160. 1630  PRINT USING "######,.##"; I
  161. 1640  Q2$="COMPUTE" : GOSUB 3400        'ASK FOR ANOTHER
  162. 1650  IF YN$="N" THEN RETURN ELSE GOTO 1480
  163. 1660  REM --------------------------------------
  164. 1670  N$= "NET PRESENT VALUE, UNEVEN CASH FLOWS"
  165. 1680  REM --------------------------------------
  166. 1690  DIM PV(100)               'INITIALIZE
  167. 1700  GOSUB 6200 :K=1
  168. 1710  REM  ASK FOR PARAMETERS
  169. 1720  Q1$="ENTER DATA"   :Q2$=""
  170. 1730  Q3$="AMOUNT INVESTED ($)"      :GOSUB 6600
  171. 1740  Q3$="ANNUAL INT RATE (%)"      :GOSUB 6600
  172. 1750  Q1$="ENTER ANNUAL CASH FLOWS"
  173. 1760  Q2$="IN ORDER RECEIVED"
  174. 1770  Q3$="STRIKE RETURN WHEN DONE"
  175. 1780  GOSUB 5000                  'ASK QUESTIONS
  176. 1790  J=10
  177. 1800  FOR I=1 TO 100
  178. 1810    LOCATE  J,1
  179. 1820  PRINT "CASH FLOW "+STR$(I);"        ";
  180. 1830    LOCATE J,14
  181. 1840    INPUT PV(I)                          'GET DATA & STORE
  182. 1850    IF PV(I)=0 THEN 1890
  183. 1860    J=J+1
  184. 1870    IF J=16 THEN J=10                    'RESET POINTER
  185. 1880  NEXT I
  186. 1890  NPV=-PAR(1)
  187. 1900  FOR I=1 TO 100
  188. 1910    NPV= NPV+PV(I)/(1+PAR(2)/100)^I
  189. 1920  NEXT I
  190. 1930  LOCATE 6,1
  191. 1940  PRINT : PRINT "NET PRESENT VALUE";TAB(22)
  192. 1950  A=INT(NPV*100+0.5)/100
  193. 1960  PRINT USING "$$######,.##"; A
  194. 1970  FOR I= 1 TO 100
  195. 1980    PV(I)=0
  196. 1990  NEXT I
  197. 2000  Q2$="COMPUTE" : GOSUB 3400  'ASK FOR ANOTHER
  198. 2010  IF YN$="N" THEN RETURN ELSE GOTO 1700
  199. 2020  REM ------------------------------
  200. 2030  N$=        "TIME TO DOUBLE"
  201. 2040  REM ------------------------------
  202. 2050  GOSUB 6200 : K=1                   'INITIALIZE
  203. 2060  REM  ASK FOR PARAMETERS
  204. 2070  Q1$="ENTER DATA"  :Q2$=""
  205. 2080  Q3$="PERIODS PER YEAR"      :GOSUB 6600
  206. 2090  Q3$="ANNUAL INT RATE (%)"   :GOSUB 6600
  207. 2100  REM DO THE COMPUTATION
  208. 2110  PRINT : PRINT "TIME TO DOUBLE (YRS)";TAB(25)
  209. 2120  I=PAR(2)/100/PAR(1)
  210. 2130  Y=LOG(2)/(PAR(1)*LOG(1+I))
  211. 2140  Y=INT(Y*100+0.5)/100
  212. 2150  PRINT USING "######.##"; Y
  213. 2160  Q2$="COMPUTE" : GOSUB 3400        'ASK FOR ANOTHER
  214. 2170  IF YN$="N" THEN RETURN ELSE GOTO 2050
  215. 2180  REM ------------------------------
  216. 2190  N$=   "EQUIVALENT INTEREST RATE"
  217. 2200  REM ------------------------------
  218. 2210  GOSUB 6200 : K=1                  'INITIALIZE
  219. 2220  REM  ASK FOR PARAMETERS
  220. 2230  Q1$="ENTER DATA"  :Q2$=""
  221. 2240  Q3$="ANNUAL INT RATE (%)"    :GOSUB 6600
  222. 2250  Q3$="AVAILABLE PERIODS  "    :GOSUB 6600
  223. 2260  Q3$="DESIRED   PERIODS  "    :GOSUB 6600
  224. 2270  I=PAR(1) : Q2=PAR(2) : Q1=PAR(3)
  225. 2280  IEQ=Q1*(1+I/100/Q2)^(Q2/Q1)-Q1
  226. 2290  PRINT : PRINT "EQUIV INT RATE";TAB(25)
  227. 2300  PRINT USING "######.##";IEQ*100
  228. 2310  Q2$="COMPUTE" : GOSUB 3400
  229. 2320  IF YN$="N" THEN RETURN ELSE GOTO 2210
  230. 3400  REM          "ANOTH"
  231. 3401  ' --------------------------------
  232. 3402  '      ASK FOR ANOTHER RUN
  233. 3403  '
  234. 3404  'THIS ROUTINE ASKS THE USER WHETHER TO CONTINUE
  235. 3405  '
  236. 3406  'CALLING PARAMETERS:
  237. 3407  '    Q2$= STRING TO SPECIFY WHAT OPERATION TO DO
  238. 3408  '
  239. 3409  'RETURNED PARAMETERS:
  240. 3410  '    YN$= A "Y" OR "N" FOR YES OR NO
  241. 3411  '
  242. 3412  ' --------------------------------
  243. 3420  Q1$="WOULD YOU LIKE TO "
  244. 3430  Q3$="AGAIN Y OR N ?"
  245. 3440  GOSUB 5000                       'PRESENT DIALOG
  246. 3450  GOSUB 7800                       'ASK YES OR NO
  247. 3460  RETURN
  248. 5000  REM        "DIALOG"
  249. 5001  ' -------------------------------
  250. 5002  '         DIALOGUE
  251. 5003  '
  252. 5004  'CALLING PARAMETERS:
  253. 5005  '   Q1$,Q2$,Q3$, = QUESTIONS TO DISPLAY
  254. 5006  '
  255. 5007  'RETURNED PARAMETERS:
  256. 5008  '   NONE
  257. 5009  '
  258. 5010  'COMMENT: UNUSED QUESTION STRINGS SHOULD BE SET
  259. 5011  '          TO NULL ("")
  260. 5012  '
  261. 5013  ' -------------------------------
  262. 5020  FOR I= 20 TO 23
  263. 5030   LOCATE I,1
  264. 5040   IF I > 20 THEN 5080
  265. 5050     FOR J= 1 TO 40           'DRAW A BORDER
  266. 5060       PRINT "-";
  267. 5070     NEXT J
  268. 5080   IF I = 21 THEN PRINT Q1$; 'FIRST QUESTION
  269. 5090   IF I = 22 THEN PRINT Q2$; 'SECOND QUESTION
  270. 5100   IF I = 23 THEN PRINT Q3$; 'THIRD QUESTION
  271. 5109  REM RESTORE CURSOR HERE AFTER 3RD QUEST
  272. 5110    CP1=POS(N)
  273. 5120    CP=POS(N)                'CURSOR COLUMN POSITION
  274. 5130    IF CP>40 THEN 5150
  275. 5140     PRINT " "; : GOTO 5120  'ERASE ANY PRIOR INFO
  276. 5149  REM RESTORE CURSOR FOR USER RESPONSE
  277. 5150  LOCATE I,CP1
  278. 5160  NEXT I
  279. 5170  RETURN
  280. 5400  REM         "INCH"
  281. 5401  ' ------------------------------
  282. 5402  '        INPUT CHARACTER
  283. 5403  '
  284. 5404  'CALLING PARAMETERS:
  285. 5405  '   NONE
  286. 5406  '
  287. 5407  'RETURNED PARAMETERS:
  288. 5408  '   CH$=INPUT CHARACTER
  289. 5409  '
  290. 5410  ' ------------------------------
  291. 5420  REM WAIT FOR INPUT CHARACTER
  292. 5430  CH$= INKEY$ : IF CH$="" THEN 5430
  293. 5440  Z=ASC(CH$)
  294. 5450  IF Z < 97 OR Z > 122 THEN 5470
  295. 5460  Z=Z-32
  296. 5470  CH$=CHR$(Z)
  297. 5480  RETURN
  298. 6200  REM            "INIT"
  299. 6201  '----------------------------------
  300. 6202  '         INITIALIZE DISPLAY
  301. 6203  '
  302. 6204  'THIS ROUTINE CLEARS THE SCREEN
  303. 6205  '   AND PRINTS THE PROGRAM TITLE
  304. 6206  'CALLING PARAMETERS:
  305. 6207  '   N$=TITLE OF PROGRAM
  306. 6208  '
  307. 6209  'RETURNED PARAMETERS:
  308. 6210  '   NONE
  309. 6211  '
  310. 6212  ' ----------------------------------
  311. 6220  CLS                                 'CLEAR SCREEN
  312. 6230  PRINT N$    : PRINT                 'TITLE
  313. 6240  KEY OFF
  314. 6250  RETURN
  315. 6600  REM             "INPAR"
  316. 6601  ' --------------------------------
  317. 6602  '         INPUT PARAMETERS
  318. 6603  '
  319. 6604  'CALLING PARAMETERS:
  320. 6605  '   Q1$,Q2$=USER INSTRUCTIONS
  321. 6606  '   Q3$=NAME OF DATA ITEM
  322. 6607  '
  323. 6608  'RETURNED PARAMETERS:
  324. 6609  '   PAR(K)=THE DATA ITEM OBTAINED
  325. 6610  '
  326. 6611  'COMMENT: CALL WITH K=1 FOR FIRST DATA ITEM
  327. 6612  '         K AUTOMATICALLY UPDATED
  328. 6613  '
  329. 6614  ' -------------------------------
  330. 6620  GOSUB 5000                        'ASK QUESTIONS
  331. 6630  INPUT PAR(K)                      'GET VALUE
  332. 6640  REM ECHO QUESTION AND ANSWER
  333. 6650  LOCATE K+2,3
  334. 6660  PRINT Q3$; TAB(24);
  335. 6670  PRINT USING "######,.##"; PAR(K)
  336. 6680  K=K+1
  337. 6690  RETURN
  338. 7000  REM         "MENU"
  339. 7001  ' ------------------------------
  340. 7002  '        MENU PROGRAM
  341. 7003  '
  342. 7004  'THIS PROGRAM DISPLAYS A MENUE
  343. 7005  '  AND CHOOSES A PROGRAM
  344. 7006  'CALLING PARAMETERS:
  345. 7007  '  N= NO. OF MENU ITEMS
  346. 7008  '  X$(I)= ARRAY OF PROGRAM NAMES
  347. 7009  '
  348. 7010  'RETURNED PARAMETERS:
  349. 7011  '  X=PROGRAM NUMBER CHOSEN
  350. 7012  '
  351. 7013  ' ------------------------------
  352. 7020  CLS
  353. 7030  FOR I = 1 TO N               'DISPLAY MENU
  354. 7040    IF I=10 THEN PRINT 0; ELSE PRINT I;
  355. 7050     PRINT  "= " ; X$(I)
  356. 7060  NEXT I
  357. 7070  Q1$="" : Q2$=""
  358. 7080  Q3$="CHOOSE PROGRAM :"
  359. 7085  PRINT:PRINT"      F10 to EXIT program
  360. 7090  GOSUB 5000                   'ASK QUESTIONS
  361. 7100  GOSUB 5400                   'INPUT CHAR
  362. 7110  X= VAL(CH$)
  363. 7119  REM SEE IF CHAR IN RANGE
  364. 7120  IF X>=1 AND X<=N THEN RETURN
  365. 7130  IF X=0 AND N=10 THEN 7140 ELSE 7150
  366. 7140  X=10 : RETURN
  367. 7150  Q1$="ILLEGAL CHOICE, CHOOSE AGAIN"
  368. 7160  GOSUB 5000
  369. 7170  GOTO 7100
  370. 7800  REM          "YESNO"
  371. 7801  ' -------------------------------
  372. 7802  '            YES-NO
  373. 7803  '
  374. 7804  'CALLING PARAMETERS:
  375. 7805  '  NONE
  376. 7806  '
  377. 7807  'RETURNED PARAMETERS:
  378. 7808  '  YN$= CONTAINS A Y OR N
  379. 7809  '
  380. 7810  ' -------------------------------
  381. 7815  LOCATE 24,40:PRINT" F6 or F10 to EXIT program
  382. 7820  REM WAIT FOR KEY TO BE STRUCK
  383. 7830  YN$=INKEY$ : IF YN$="" THEN 7830
  384. 7840  IF YN$="y" THEN YN$="Y"
  385. 7850  IF YN$="n" THEN YN$="N"
  386. 7860  IF YN$ = "Y" OR YN$ = "N" THEN 7890
  387. 7870  REM NOT YES OR NO TRY AGAIN
  388. 7880  GOTO 7830
  389. 7890  PRINT YN$  :  RETURN
  390.